package JDK;

import org.junit.Test;
import 集合.Emp;

import java.util.Comparator;
import java.util.function.BiFunction;
import java.util.function.BiPredicate;
import java.util.function.Function;
import java.util.function.Supplier;

/**
 * 方法引用：是lambda表达式作为函数接口的实例
 * 使用格式
 * 情况一：  对象::非静态方法
 * 情况二：  类::静态方法
 * 情况三：  类::非静态方法
 * 构造器引用
 * 数组引用
 *
 */
public class JDK8 {
    //情况三
    //Comparator中的 int compare(T t1,T t2)
    //String中的 t1.compareTo(t2)
    @Test
    public void test0(){
        Comparator<String> c=String::compareTo;
        System.out.println(c.compare("aa","mmm"));
    }
    //BiPredicate中的 boolean test(T t1,T t2)
    //String中的 boolean t1.equals(t2)
    @Test
    public void test1(){
        BiPredicate<String,String> c=String::equalsIgnoreCase;
        System.out.println(c.test("aa","mmm"));
    }
    //Function中的 R apply(T t)
    //Employee中的 String getName()
    @Test
    public void test2(){
        Emp emp = new Emp("aa", 1, "4", 54);
        Function<Emp,String> c=Emp::getName;
        System.out.println(c.apply(emp));
    }
    //构造器引用
    //Supplier中的 T get()
    //Function中的 R apply(T t)
    //BiFunction中的 R apply(T t,U u)
    @Test
    public void test3(){
        Supplier<Emp> sup=Emp::new;//Emp::new==return new Emp()
        Function<String,Emp> fun=Emp::new;//Emp::new==return new Emp(String str)
        BiFunction<String,Integer,Emp> bi=Emp::new;//Emp::new==return new Emp(String str,int i)

    }

}
